import random


def add_signature(Table, attr_str, user, serializer, compare_attr='id', signature_name='flag'):
    """
    本方法用于在序列化返回的时候往序列化器中插入一个多对多表表中的数据标志,
    比如:文章收藏表,可以将当前用户收藏的文章出现在序列化器中的,在其中插入一个True或者False标志
    便于前端展示用户是否收藏
    :param Collections: 多对多的第三方表的模型名
    :param attr_str: 第三方表中用于比较的属性的字符串
    :param user: 当前用户
    :param serializer: 返回到前端的序列化器
    :param compare_attr: 序列化器中用于比较的属性
    :param signature_name: 插入到序列化器中的标志的字符名称
    :return:
    """
    # 从第三方表查出当前用户的数据
    signatures = Table.objects.filter(user=user)
    # 构建当前用户数据的比较集列表
    signatures_attr_li = []
    for signature in signatures:
        # 按照传入的需要收集的比较属性,获得属性,并追加到比较集列表中
        signatures_attr_li.append(getattr(signature, attr_str))
    # 遍历序列化器数据
    for data_dict in serializer.data:
        # print(data_dict['id'])
        # 如果当前数据的比较属性出现在比较集中,则插入True,否则False
        if data_dict[compare_attr] in signatures_attr_li:
            # 有序字典继承与普通字典,他同样具有普通字典的方法
            # 插入是否收藏的标志
            data_dict[signature_name] = True
        else:
            data_dict[signature_name] = False


def generate_AnonymousUserName():
    """生成一个随机的用户名"""
    return get_userName()


def get_userName():
    userName = ''
    # 8位用户名及6位密码
    userName = ''.join(
        random.sample("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ", 8))

    return userName


# userName = ''
# userPassword = ''

# def get_userNameAndPassword():
#     global userName, userPassword
#     # 8位用户名及6位密码
#     userName = ''.join(
#         random.sample("1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%^&*()_+=-><:}{?/", 8))
#     userPassword = ''.join(random.sample("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_.1234567890", 6))
#
#     try:
#         get_userNameAndPassword()
#         print("用户名:", userName)
#         print("密码:", userPassword)
#
#     except Exception as e:
#         print(e.reason)

if __name__ == '__main__':
    print(generate_AnonymousUserName())
